'''
泊松分布
概率分布函数图像
'''

# 泊松分布
import numpy as np
import scipy.stats as st
import matplotlib.pyplot as plt
from pylab import mpl
plt.style.use('seaborn-darkgrid')
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文字体
plt.rcParams['axes.unicode_minus'] = False  # 显示负号


def make_poisson(lmd, tm):
    '''
    用均匀分布模拟泊松分布。 lmd为 lambda 参数； tm 为时间
    '''
    t = np.random.uniform(0, tm, size=lmd * tm)  # 获取 lmd*tm 个事件发生的时刻
    count, tm_edges = np.histogram(t, bins=tm,
                                   range=(0, tm))  #获取每个单位时间内，事件发生的次数
    max_k = lmd * 2  # 要统计的最大次数
    dist, count_edges = np.histogram(count,
                                     bins=max_k,
                                     range=(0, max_k),
                                     density=True)
    x = count_edges[:-1]
    return x, dist, st.poisson.pmf(x, lmd)


a1, b1, f1 = make_poisson(9, 2)
a2, b2, f2 = make_poisson(10, 2)
a3, b3, f3 = make_poisson(11, 2)
plt.plot(a1, f1, '-*', label=r'$\lambda$ = {}'.format(10))
plt.plot(a2, f2, '-*', label=r'$\lambda$ = {}'.format(25))
plt.plot(a3, f3, '-*', label=r'$\lambda$ = {}'.format(50))
plt.xlabel('x', fontsize=12)
plt.ylabel('f(x)', fontsize=12)
plt.legend(loc=1)
plt.title("泊松分布——不同参数的概率分布函数")
plt.show()
